{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 在Rental Listing Inquiries数据上练习xgboost参数调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 需要根据公寓的特征来预测其受欢迎程度（用户感兴趣程度分为高、中、低三类）。其中房屋的特征x共有14维，响应值y为用户对该公寓的感兴趣程度。评价标准为logloss。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 模型训练：超参数调优\n",
    "1. 初步确定弱学习器数目\n",
    "2. 对树的最大深度（可选）和min_children_weight进行调优（可选）\n",
    "3. 对正则参数进行调优\n",
    "4. 重新调整弱学习器数目\n",
    "5. 行列重采样参数调整\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第一步：确认弱分类器最优数目"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "#用于计算feature字段的文本特征提取\n",
    "from sklearn.feature_extraction.text import  CountVectorizer\n",
    "#from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "\n",
    "#CountVectorizer为稀疏特征，特征编码结果存为稀疏矩阵xgboost处理更高效\n",
    "from scipy import sparse\n",
    "\n",
    "#对类别型特征进行编码\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from MeanEncoder import MeanEncoder\n",
    "\n",
    "#对地理位置通过聚类进行离散化\n",
    "from sklearn.cluster import KMeans\n",
    "from nltk.metrics import distance as distance\n",
    "\n",
    "#导入xgboost\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "#可视化工具\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 直接导入处理过的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#input data\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath +\"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 查看interest_level 分布，看看各类样本分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x290268d0ac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('target');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 每类样本分布不是很均匀"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 取X_trian 和 y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cross Validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 默认参数，此时学习率为0.1，比较大，观察弱分类数目的大致范围（采用默认参数配置，看看模型是过拟合还是欠拟合）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 绘制对训练集预测结果与原始结果数据的对比图，确定弱分类器的最优数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nygqOt5Iqw2sAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x29027e6ef60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nuxfWuflAePH65u/VhatcVrQkSZKkzmxuX4S855Uw/Wt4/ioY9Yes7d+PZJ867z0Jy2/W/L260Bbx\nVrQkSZIkNa33ErDZiXm85X9D/3Xz+Ia94Ia9Kz+uGmaiJUmSJHU1bdmtsNhmJ8Ih9+Vxt57w3ug8\n/uAZSKll9+qkywtdOihJkiR1dW3ZQKPYMU/C6PPg5Ruz+LrdYan1YcPDyzfGDsaKliRJkqS503dp\n+NG5edy9F3w0Fu48Jm+bNrll9+okFS4rWpIkSZLqm9sNNI5/LqtuPXsZfPufrG3oBtnLkbsIK1qS\nJEmSymuBxWCr/84SrjozvskSrzofvVD5cVWQFS1JkiRJzWvLc1w95s2P9xkOzw6Dcf/I4mt2hmU2\n6rTPcZloSZIkSWq91iZeK22dfereo9V9nmx3wg+eyftM/wZ6LVj+sVaBSwclSZIkVd5xz8IW/wXz\nLZy3Dd0AHv1d9cZURiZakiRJkuZea9/NtWA/2Ob/1X+Oa/pkGHNJHn/zefnHWSEmWpIkSZKqp+f8\n+fHe18Jym+VxB15G6DNakiRJktpHa5/jWnnb7FP3HFfP+dpvbO3MipYkSZIklZkVLUmSJEmVMbcv\nQu5ArGhJkiRJUplZ0ZIkSZJUPW15EXIHYEVLkiRJksrMipYkSZKk2tFJnuOyoiVJkiRJZWaiJUmS\nJEllZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIk\nSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJ\nZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEll\nZqIlSZIkSWVmoiVJkiRJZWaiJUmSJEllZqIlSZIkSWVmoiVJkiRJZVYTiVZEHBsR4yJiWkSMjYiB\nLbxu34hIEXFnSfuCETE0Ij6MiKkR8UZEHNM+o5ckSZKk+qqeaEXEPsD5wFnAusATwAMRsWwz1y0H\n/LnQv9R5wA7AAcDqhfjCiNitjEOXJEmSpAZVPdECTgauTCldkVJ6I6V0EvAB0GgFKiK6A8OBM4B3\nG+iyCXBNSunxlNJ7KaXLgJeBDco/fEmSJEmqr6qJVkTMA6wPjCg5NQLYtIlLTwc+Tyld2cj50cCu\nEbFUZLYGVgUeamQcvSKiT90H6N2qb0SSJEmSivSo8q+/GNAd+LSk/VNgiYYuiIjNgCHAOk3c90Tg\ncuBDYCYwGzg8pTS6kf6nklXHJEmSJGmuVTvRqpNK4migjYjoDVwPHJFS+qKJ+50IbAzsCowHtgAu\njoiPU0oPN9D/HOAvRXFv4MPJkye3/DuQJEmS1Om0NSeodqL1BTCLOatX/ZizygWwErA8cE9E1LV1\nA4iImcBqwATgbGD3lNJ9hT6vRMQ6wC+AORKtlNJ0YHpdXEjoWGaZZdryPUmSJEnqfHoDLc66qppo\npZRmRMRYYDBwR9GpwcBdDVzyJrBWSdvvyb7pn5FtojEv0JNsuWCxWbT8mbQJwNLA1y3s3556ky2B\nrJXxdDbOb/txbtuX89t+nNv25fy2L+e3/Ti37avW57c3WY7QYtWuaEG2ZO+6iHgeeBo4ElgWuBQg\nIq4FPkopnZpSmga8VnxxREwESCnVtc+IiFHAnyJiKtnSwS2Bg8h2OGxWSikBH83tN1YORZW7r1NK\nrmUsM+e3/Ti37cv5bT/ObftyftuX89t+nNv21QHmt9VjqnqilVK6OSIWJdtJcEmyRGqnlNL4Qpdl\nmbM61Zx9yZ67Gg4sQpZs/Q+F5E2SJEmS2lPVEy2AlNLFwMWNnNuqmWsPaaDtE+DQcoxNkiRJklqr\nFl5YrKZNB35D0WYdKivnt/04t+3L+W0/zm37cn7bl/Pbfpzb9tXp5jeyx5EkSZIkSeViRUuSJEmS\nysxES5IkSZLKzERLkiRJksrMREuSJEmSysxEq0oiYouIuCciJkREiogfl5yPiDizcH5qRDweET8o\n6bNwRFwXEZMKn+siYqHKfie1p6m5jYieEfG/EfFqREwp9Lk2IvqX3MO5bURzP7slfYcV+pxU0u78\nNqAlcxsRq0fE3YV5+zoixkTEskXne0XEhRHxReFn/O6IWLqy30ltasHvuwtGxNCI+LDw++4bEXFM\nSR/ntwERcWpEPFf4mfwsIu6MiNVK+jQ7dxGxbOG/0ZRCvwsiYp7Kfje1pbm5jYhFCvP6VkR8GxHv\nF+atb8l9nNsGtORnt6hvRMQDjfz+4fyWaOncRsQmEfFoYe4mRvZ33vmKznfYvzOYaFXPAsDLwPGN\nnP8lcHLh/IbAJ8DIiOhd1OcGYB1gh8JnHeC69hpwB9LU3M4PrAf8rvB1D2BV4O6Sfs5t45r72QWg\n8IfQRsCEBk47vw1rcm4jYiVgNPAmsBXwQ7Kf5WlF3c4Hdid7cfvmwILAvRHRvd1G3XE097N7HtnP\n4wHA6oX4wojYraiP89uwLYGLgI2BwWTv6RwREQsU9Wly7gpf7yP777R5od9PgHMr9D3Uqubmtn/h\n8wtgLeAQsp/jK+tu4Nw2qSU/u3VOAubYrtv5bVSzcxsRmwAPAiOAAWR/5x0KzC66T8f9O0NKyU+V\nP2T/0/64KA7gY+BXRW29gInAUYV49cJ1GxX12bjQtlq1v6da+ZTObSN9Niz0W9a5Lc/8AksBHwI/\nAN4DTio65/y2cW6Bm4DrmrimLzAD2KeorT8wC9i+2t9TLX0amd/XgF+XtI0Ffuf8tnp+Fy/M8RYt\nnTtgx0Lcv6jPvmT/kNCn2t9TrXxK57aRPnuRvYuoh3Nbnvkl+4etD4AlGvh7m/PbxrkFxtT9HtvI\nNR367wxWtGrTCmT/I4+oa0gpTQdGAZsWmjYBJqWUninqMwaYVNRHLdOX7H/YiYXYuZ0LEdGN7F+a\n/pRS+mcDXZzfNijM64+AtyPiocIyjGdKlq+sD/Sk/u8dE8gSCOe2eaOBXSNiqcISoa3JKt4PFc47\nvy1Xt2zty8LXlszdJsBrhfY6D5H9Q+P67TrajqV0bhvrMzmlNLMQO7ctN8f8RsT8wI3A8SmlTxq4\nxvltmXpzGxH9yFa+fBYRT0XEpxExKiI2L7qmQ/+dwUSrNi1R+PppSfunReeWAD5r4NrPivqoGREx\nL/AH4IaU0uRCs3M7d34FzAQuaOS889s2/ciWWv032TKL7YA7gNsjYstCnyWAGSmlr0quLf69Q407\nEXidrBo7g2yej00pjS6cd35bICIC+AswOqX0WqG5JXO3BCV/7hX6z8D5BRqd29I+iwK/BoYVNTu3\nLdDE/J4HPJVSuquRS53fZjQytysWvp4JXE62LPAF4JGIWKVwrkP/naFHtQegJpWuA46StjnWCTfQ\nR42IiJ5kS7G6AceWnHZu2yAi1gd+BqyXCvX9Rji/rVf3D2N3pZTOKxy/FBGbAkeTVbwb49y2zIlk\nS1J2BcYDWwAXR8THKaWHm7jO+a1vKLA22bMqzfHPtdZpcm4jog/Zs0KvA78pOe3cNm+O+Y2IXYFt\ngHWbudb5bVpDP7t1f64NSyldVTh+MSIGAYcBpxbaOuzcWtGqTXVl6dJMvR/5v5h8AnyvgWsXZ85K\nmEoUkqy/ky3THFxUzQLndm4MJPs5fT8iZkbETGA54NyIeK/Qx/ltmy/IKoWvl7S/AdTtOvgJME9E\nLFzSp/j3DjWgsMPV2cDJKaV7UkqvpJSGAjeTbTIAzm+zIuJCskR165TSh0WnWjJ3n1Dy516hf0+c\n36bmtu58b7Iq7DfA7iml74pOO7fNaGJ+twFWAiYW/bkGcFtEPF44dn6b0MTcflz42tyfax327wwm\nWrVpHNkP1uC6hsIWoVsCTxWangb6RsSAoj4bka1/fQo1qijJWgXYNqX0n5Iuzm3bXUf2L1brFH0m\nAH8Cti/0cX7bIKU0A3gOKN0ad1Wy6gtkGzd8R/3fO5YE1sS5bU7Pwmd2Sfss8j8rnd9GFJ5pG0q2\nk+s2KaVxJV1aMndPA2sW2v9/e/cfa3Vdx3H8+YpGUpCNnNlaSsPUfg0atsqwKMw2/rD8kXOrTfyj\ntTbXpF/WEqJoy6IfK1k/rAVrRsrazGGZBWYt9Q+TKSQS1HZbNSAHKYIpSJ/++HxunQ7ccy/cI4cb\nz8f2Hfd8v5/P9/v5vDn3fM/7fj7nc4ZdSF3U4YFnq+3HuzHEdngk6xfUqWoXlVKe6ipibEcwhvhe\nz6H3NYBFwFXtZ+N7GGOI7RD1PUKv+9rEfs8w6NU4TtSN+lmL4V/YQv2Fnc1/V767lro4w8XUG9Fq\n6pNxWsc57qAuVfymtm0E1g66b4PeesWWOl32NurKQbOof4Ea3iYb2/HFd4TyQ3SsOmh8jz627fVg\nP/AB4EzqMuXPAHM7zvGt9vyeT53qsh54EJg06P4NehtDfO+mLs4wjzravRD4J/Ah4ztqbL/Z7llv\n63pdnTLW2AGTgE3AunZ8fit/w6D7dzzHFphGXbltI3XkpbOMsR1nfEeo073qoPE9ythSl8x/HLis\n3deWtdfdmR1lJux7hoE34ETd2o28HGZb1Y6H+uHA7dTlQX8NvLbrHNOBm4A9bbsJeNGg+zborVds\ngRkjHCvAPGM7vviOUH6IQxMt43uUsaXOW9/WbkQPAu/uOsdJwA3ALuBJYC3w8kH37XjYxvC6exqw\nEvhbi+8W6vcZxviOGtuRXlcXHknsqH8Qu70d39XKP2/Q/TueY9vjeV2AGcZ2fPHtUaf76yGM71HG\nlrrI01+AfdRRqrldxyfse4a0DkiSJEmS+sTPaEmSJElSn5loSZIkSVKfmWhJkiRJUp+ZaEmSJElS\nn5loSZIkSVKfmWhJkiRJUp+ZaEmSJElSn5loSZIkSVKfmWhJkk5oSYaSXDPodkiS/r+YaEmSTghJ\nFiZ57DCH3gDceAyub0InSSeQ5w66AZIkDVIp5dFBt+FIJJlcStk/6HZIknpzREuSdEwluTvJN5J8\nKcnuJDuSLB1j3ZOT3Jjk70n2JLkryayO47OS/CrJE+34A0nOTTIPWAmcnKS0bWmr8z8jTe3YB5Pc\nnuTJJI8keXOSM1vb9yW5L8nMjjozk9yWZGeSvUnuT3JBZ5+BM4CvDV+/49ilSR5O8nRry0e7+jyU\n5Lokq5I8Dnw3yeQkK5JsT/JUK/OpI/qPkCQ9q0y0JEmDcCWwD3gj8AlgSZJ39qqQJMBPgdOABcAc\nYAOwPsn0VuyHwF+p0wHnANcDB4B7gWuAPcBL2/blHpdbDPwAmA1sAVYD3wG+AJzbyqzoKD8V+Blw\nAfB64E5gbZLT2/FLWruWdFyfJHOANcDNwOuApcCyJAu72vNx4PetT8uADwMXAZcDZwPvB4Z69EeS\ndIw5dVCSNAgbSymfbT9vS3I1MB/4ZY86b6cmI6eWUp5u+z6W5D3AZdTPWZ0OLC+lbBk+93DlNhpU\nSik7xtC+laWUNa3eF4H7gGWllDvbvq9TR8ignvQh4KGO+tcluZiaDK0opexOchB4ouv6HwHWl1KW\ntcdbk7yamlit6ih3VynlP4lhS+C2Ab8tpRTgz2PokyTpGHJES5I0CBu7Hm8HTh2lzhzqyNGuNj1v\nb5K9wCuA4Wl8XwW+l2Rdkk92Tu8bR/t2tn83de07KckLAZK8oE2F3Jzksdauc6iJXy+vAu7p2ncP\n8Mokkzr2/a6rzCrqaNsf2jTMC0ftkSTpmDLRkiQNwoGux4XR70nPoSZks7u2s4HlAKWUpcBrqFMM\n3wFsbiNL42lf6bFvuM3LgUuBTwPnt3ZtAiaPcp10nKtzX7d9nQ9KKRuoCeZiYAqwJsmPR7mWJOkY\ncuqgJGmi2ED9fNYzpZShkQqVUrYCW6kLT/wIuAq4FdgPTBqp3jidD6wqpdwKkGQqMKOrzOGuvxmY\n27XvPGBrKeVgrwuWUvYAtwC3tCTr50mml1J2H10XJEn95IiWJGmiWEf9rNRPkrwryYwk5yX5fFtZ\ncEpbiW9ekjOSvIW6KMYjrf4QMDXJ/CSnJHl+H9v2R+CSJLPbKoirOfQeOwS8NcnLkpzS9n0FmJ9k\ncZKzklwJXE3vhTpIsijJFUnOSXIW8F5gB3C47wmTJA2AiZYkaUJoiz4sAH4DfJ86anXZCBXfAAAA\n30lEQVQzdeRoJ3AQeDF1tcCt1NX87gA+0+rfC3ybOgr0KHW1w35ZBPyDurrhWuqqgxu6yixpbf1T\nu/7wFMDLgSuoqwp+DlhSSlk1yvX2AtdSP7t1fzvvglLKv8bdE0lSX6TetyRJkiRJ/eKIliRJkiT1\nmYmWJOm4kOR9ncu2d20PD7p9kiQdCacOSpKOC0mmAS8Z4fCBUopfyitJmjBMtCRJkiSpz5w6KEmS\nJEl9ZqIlSZIkSX1moiVJkiRJfWaiJUmSJEl9ZqIlSZIkSX1moiVJkiRJfWaiJUmSJEl99m+73jhG\npLizwAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2902840de48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 若分类器初步最优数目：261"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
